// WebSocket 客户端类
// 该类用于创建和管理 WebSocket 连接
// 提供连接、重连、关闭等功能
class WebSocketClient {
    /**
     * 构造函数
     * @param {string} url - WebSocket 服务器地址
     * @param {object} options - 可选参数
     */
    constructor(url, options = {}) {
        this.url = url
        this.options = options
        this.ws = null
        this.reconnectAttempts = 0
        this.maxReconnectAttempts = 5
    }

    /**
     * 连接到 WebSocket 服务器
     */
    connect() {
        this.ws = new WebSocket(this.url)

        /**
         * WebSocket 连接打开时的回调函数
         */
        this.ws.onopen = () => {
            this.reconnectAttempts = 0
            if (this.options.onOpen) {
                this.options.onOpen()
            }
        }

        /**
         * WebSocket 消息接收时的回调函数
         * @param {object} event - 消息事件
         */
        this.ws.onmessage = (event) => {
            const data = JSON.parse(event.data)
            if (this.options.onMessage) {
                this.options.onMessage(data)
            }
        }

        /**
         * WebSocket 连接关闭时的回调函数
         */
        this.ws.onclose = () => {
            if (this.options.onClose) {
                this.options.onClose()
            }
            this.reconnect()
        }

        /**
         * WebSocket 错误时的回调函数
         * @param {object} error - 错误对象
         */
        this.ws.onerror = (error) => {
            if (this.options.onError) {
                this.options.onError(error)
            }
        }
    }

    /**
     * 尝试重新连接 WebSocket 服务器
     */
    reconnect() {
        if (this.reconnectAttempts < this.maxReconnectAttempts) {
            this.reconnectAttempts++
                setTimeout(() => this.connect(), 3000)
        }
    }

    /**
     * 关闭 WebSocket 连接
     */
    close() {
        if (this.ws) {
            this.ws.close()
        }
    }
}

// 导出 WebSocketClient 类
export default WebSocketClient